A computer system includes several components, such as a central processing unit (CPU) and communications devices that transfer data to and from memory. A priority may be assigned to each device in the computer system, so that if two or more devices attempt to access the memory at the same time, the device with the higher priority is able to access the memory first. Typically, the priority system that is used to resolve data transfer conflicts is based on a set of assumptions. For example, an internet port may have a history of generating a large amount of data transfer requests, where the amount of data that is transferred is very large. The CPU may have a history of being idle for long periods of time, followed by generating a data transfer request for a small amount of data. In this case, the data transfer request from the CPU will be given a higher priority, because the time required for the data transfer to or from the CPU will be very small. However, these assumptions may change. Thus, the problem with the prior art methods for arbitration of data transfer requests is that the priorities used in the arbitration are fixed, and are thus inefficient when the assumptions underlying the priorities change.